package com.songtech.uitest.components;

import com.songtech.uitest.entities.Indent;
import com.songtech.uitest.util.JarPathHelper;
import com.songtech.uitest.util.ModulesMapper;
import com.songtech.uitest.util.StepParser;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class ScreenShoter {

    @Autowired
    private StepParser stepParser;

    @Autowired
    @Qualifier("indent")
    private Indent indent;

    @Autowired
    private JarPathHelper jarPathHelper;

    @Autowired
    private ModulesMapper modulesMapper;

    /**
     * 截图功能
     * @param obj 位置1：类名，位置2：方法名，位置3：额外信息
     */
    public void screenShot(Object[] obj){

        //得到当前位置，flow,从而得到当前阶段(如03300)的最后2位，就是需要的step了。
        int pos = indent.getStepPosition();
        String flow = indent.getFlow();
        String[] flowArray = flow.split(",");
        String step = flowArray[pos].substring(3);

        try {
            //得到当前step所用的webdriver
            WebDriver driver = stepParser.getDriver(step);
            //driver需要强制转换为RemoteWebDriver对象
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

            //获取时间作为截图名
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd HH-mm-ss");//设置日期格式
            String date = df.format(new Date());

            String clsName = obj[0].toString();
            String methodName = obj[1].toString();
            String otherInfo = obj[2].toString();

            String destFileName = date + "执行" + clsName + "类的" + methodName + "方法" + otherInfo + "时出错截图.png";

            String destFilePath = jarPathHelper.getScreenShotsFilePath(destFileName);

            //利用FileUtils工具类的copy()方法保存getScreenshotAs()返回的文件对象。
            FileUtils.copyFile(scrFile, new File(destFilePath));

        } catch (IOException e) {
            // 异常处理
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    /**
     * 截图功能
     */
    public void screenShot(String info){

        //得到当前位置，flow,
        int pos = indent.getStepPosition();
        String flow = indent.getFlow();
        String[] flowArray = flow.split(",");
        String classMethod = modulesMapper.getClassMethod(flowArray[pos].substring(0, 3));
        //得到类名
        String clsName = StringUtils.substringBefore(classMethod, ".");
        //得到方法名
        String methodName = StringUtils.substringAfterLast(classMethod, ".");
        //得到当前阶段(如03300)的最后2位，就是需要的step了。
        String step = flowArray[pos].substring(3);

        try {
            //得到当前step所用的webdriver
            WebDriver driver = stepParser.getDriver(step);
            //driver需要强制转换为RemoteWebDriver对象
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

            //获取时间作为截图名
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd HH-mm-ss");//设置日期格式
            String date = df.format(new Date());

            String destFileName = date + "执行" + clsName + "类的" + methodName + "方法" + info + "时出错截图.png";

            String destFilePath = jarPathHelper.getScreenShotsFilePath(destFileName);

            //利用FileUtils工具类的copy()方法保存getScreenshotAs()返回的文件对象。
            FileUtils.copyFile(scrFile, new File(destFilePath));

        } catch (IOException e) {
            // 异常处理
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }




}
